package com.laf.manage.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.laf.common.core.page.TableDataInfo;
import com.laf.manage.domain.dto.*;
import com.laf.manage.domain.po.LostItem;
import com.laf.manage.domain.query.LostItemQuery;
import com.laf.manage.domain.vo.ItemDetailsVO;
import com.laf.manage.domain.vo.LostItemVO;
import com.laf.manage.enums.QrTypeEnum;

import java.util.List;

/**
 * 失物管理Service接口
 *
 * @author zian
 * @date 2024-11-01
 */
public interface ILostItemService extends IService<LostItem> {

    /**
     * 查询失物管理列表
     *
     * @param lostItem 失物管理
     * @return 失物管理集合
     */
    List<LostItem> selectLostItemList(LostItem lostItem);

    /**
     * 查询失物管理列表 ---> es
     *
     * @param lostItem 失物管理
     * @return 失物管理集合
     */
    TableDataInfo  selectLostItemList(LostItem lostItem , Integer pageNum , Integer pageSize);
    /**
     * 失物详情
     *
     * @param id
     * @param isAdmin
     * @return
     */
    ItemDetailsVO getDetailsById(Long id , boolean isAdmin);

    /**
     * 修改失物信息
     *
     * @param dto
     * @param isAdmin
     * @return
     */
    boolean editLostItem(LostItemDTO dto , boolean isAdmin);

    /**
     * 新增物品信息
     *
     * @param dto
     * @param isAdmin
     * @return
     */
    boolean addLostItem(LostItemDTO  dto , boolean isAdmin);

    /**
     * 审核通过
     * @param id
     * @return
     */
    boolean passAudit(Long id);



    /**
     * 提交成功
     * @param id id
     * @return 是否成功
     */
    boolean submitPass(Long id);

    /**
     * 根据 ids 上传失物
     * @param list id集合
     */
    void deleteByIds(List<Long> list);

    /**
     * 校验二维码是否有效
     * @param uuid uuid
     * @param keyPrefix 对应的前缀
     */
    void checkCode(String uuid, String keyPrefix);

    /**
     * 领取物品
     * @param dto 领取信息
     */
    void receiveItem(ReceiveDTO dto);

    /**
     * 驳回物品
     * @param dto 有 id 和 驳回理由
     * @param  isAdmin 是否是管理员
     */
    void rollback(RollbackDTO  dto , boolean isAdmin);

    /**
     * 分页查询失物信息
     * @param query
     * @return
     */
    PageDTO<LostItemVO> getLostItemList(LostItemQuery query);

    /**
     * 生成二维码
     * @param id 物品id
     * @param qrTypeEnum 二维码类型
     * @return base64 编码
     */
    String generateCode(Long id, QrTypeEnum qrTypeEnum);


    /**
     * 统计失物数量
     * @return 状态数量
     */
    List<StatusCountDTO> lostCount();


}
